Source for file zip.lib.php
Documentation is available at zip.lib.php
/* $Id: zip.lib.php,v 2.4 2004/11/03 13:56:52 garvinhicking Exp $ */
// vim: expandtab sw=4 ts=4 sts=4:
* Zip file creation class.
* http://www.zend.com/codex.php?id=535&single=1
* By Eric Mueller <eric@themepark.com>
* http://www.zend.com/codex.php?id=470&single=1
* by Denis125 <webmaster@atlant.ru>
* a patch from Peter Listiak <mlady@users.sourceforge.net> for last modified
* date and time of the compressed file
* Official ZIP file format: http://www.pkware.com/appnote.txt
* Array to store compressed data
* End of central directory record
* @var string $eof_ctrl_dir
* @var integer $old_offset
* Converts an Unix timestamp to a four byte DOS date and time format (date
* in high two bytes, time in low two bytes allowing magnitude comparison).
* @param integer the current Unix timestamp
* @return integer the current date in a four byte DOS format
if ($timearray['year'] <
1980) {
$timearray['year'] =
1980;
$timearray['minutes'] =
0;
$timearray['seconds'] =
0;
return (($timearray['year'] -
1980) <<
25) |
($timearray['mon'] <<
21) |
($timearray['mday'] <<
16) |
($timearray['hours'] <<
11) |
($timearray['minutes'] <<
5) |
($timearray['seconds'] >>
1);
} // end of the 'unix2DosTime()' method
* @param string file contents
* @param string name of the file in the archive (may contains the path)
* @param integer the current timestamp
function addFile($data, $name, $time =
0)
$hexdtime =
'\x' .
$dtime[6] .
$dtime[7]
.
'\x' .
$dtime[4] .
$dtime[5]
.
'\x' .
$dtime[2] .
$dtime[3]
.
'\x' .
$dtime[0] .
$dtime[1];
eval
('$hexdtime = "' .
$hexdtime .
'";');
$fr =
"\x50\x4b\x03\x04";
$fr .=
"\x14\x00"; // ver needed to extract
$fr .=
"\x00\x00"; // gen purpose bit flag
$fr .=
"\x08\x00"; // compression method
$fr .=
$hexdtime; // last mod time and date
// "local file header" segment
$fr .=
pack('V', $crc); // crc32
$fr .=
pack('V', $c_len); // compressed filesize
$fr .=
pack('V', $unc_len); // uncompressed filesize
$fr .=
pack('v', strlen($name)); // length of filename
$fr .=
pack('v', 0); // extra field length
// "data descriptor" segment (optional but necessary if archive is not
// nijel(2004-10-19): this seems not to be needed at all and causes
// problems in some cases (bug #1037737)
//$fr .= pack('V', $crc); // crc32
//$fr .= pack('V', $c_len); // compressed filesize
//$fr .= pack('V', $unc_len); // uncompressed filesize
// add this entry to array
// now add to central directory record
$cdrec =
"\x50\x4b\x01\x02";
$cdrec .=
"\x00\x00"; // version made by
$cdrec .=
"\x14\x00"; // version needed to extract
$cdrec .=
"\x00\x00"; // gen purpose bit flag
$cdrec .=
"\x08\x00"; // compression method
$cdrec .=
$hexdtime; // last mod time & date
$cdrec .=
pack('V', $crc); // crc32
$cdrec .=
pack('V', $c_len); // compressed filesize
$cdrec .=
pack('V', $unc_len); // uncompressed filesize
$cdrec .=
pack('v', strlen($name) ); // length of filename
$cdrec .=
pack('v', 0 ); // extra field length
$cdrec .=
pack('v', 0 ); // file comment length
$cdrec .=
pack('v', 0 ); // disk number start
$cdrec .=
pack('v', 0 ); // internal file attributes
$cdrec .=
pack('V', 32 ); // external file attributes - 'archive' bit set
$cdrec .=
pack('V', $this -> old_offset ); // relative offset of local header
// optional extra field, file comment goes here
// save to central directory
} // end of the 'addFile()' method
* @return string the zipped file
pack('V', strlen($ctrldir)) .
// size of central dir
pack('V', strlen($data)) .
// offset to start of central dir
"\x00\x00"; // .zip file comment length
} // end of the 'file()' method
} // end of the 'zipfile' class
Documentation generated on Mon, 05 May 2008 16:24:36 +0400 by phpDocumentor 1.4.0